//
//  WQStatusViewModel.swift
//  WeiBo
//
//  Created by Xmen on 16/9/23.
//  Copyright © 2016年 111. All rights reserved.
//

import UIKit
import YYModel
import SDWebImage

class WQStatusViewModel: NSObject {
    //  关注用户的微博数据源
    lazy var statusList: [WQStatusModel] = [WQStatusModel]()
    
    //  加载首页微博数据
    func loadData(isPullup: Bool, callBack: @escaping (Bool)->()) {
        
        let accessToken = WQUserAccountModel.sharedUserAccountViewModel.accessToken!
        
        //  获取上拉加载请求需要的微博id
        var maxId: Int64 = 0
        //  获取下拉属性请求需要的微博id
        var sinceId: Int64 = 0
        if isPullup {
            //  上拉加载
            maxId = statusList.last?.status?.id ?? 0
            //  解决数据重复问题, 需要让其微博id减去1
            if maxId > 0 {
                maxId -= 1
            }
            
        } else {
            //  下拉刷新
            sinceId = statusList.first?.status?.id ?? 0
            
            
        }
        
        
        
        
        
        WQNetworkTool.sharedTool.requestUserInfo(accessToken: accessToken) { (response, error) in
            if error != nil {
                print("网络请求异常: \(error)")
                callBack(false)
                return
            }

            
            guard let dic = response as? [String: Any] else {
                print("你不是一个正确的字典格式")
                callBack(false)
                return
            }
            
            
            
            
            guard let statusArray = dic["statuses"] as? [[String: Any]] else {
                print("你不是一个正确的字典格式")
                callBack(false)
                return
            }

            
            //  使用yymodel进行数组字典转成数组模型
            let statusArr = NSArray.yy_modelArray(with: WQStatus.self, json: statusArray) as! [WQStatus]
            
            var tempArray = [WQStatusModel]()
            let group = DispatchGroup()
            
            //  遍历模型数组
            for status in statusArr {
                //  把模型转成viewModel让cell使用
                let viewModel = WQStatusModel(status: status)
                //viewModel.status = status
                tempArray.append(viewModel)
                //  判断是否有单张图片
                if status.pic_urls?.count == 1 {
                    //  原创微博配图等于1张,需要下载
                    if let url = status.pic_urls?.first?.thumbnail_pic {
                        DispatchQueue.global().async(group: group, qos: DispatchQoS.default, flags: [], execute: {
                            SDWebImageManager.shared().downloadImage(with: URL(string: url), options: [], progress: nil, completed: { (image, error, _, _, url) in
//                                print("下载完成: \(url)")
                            })
                        })
                    }
                }
                if status.retweeted_status?.pic_urls?.count == 1 {
                    //  转发微博图片等于1张,需要下载
                    
                    if let url = status.retweeted_status?.pic_urls?.first?.thumbnail_pic {
                        DispatchQueue.global().async(group: group, qos: DispatchQoS.default, flags: [], execute: {
                            SDWebImageManager.shared().downloadImage(with: URL(string: url), options: [], progress: nil, completed: { (image, error, _, _, url) in
//                                print("下载完成: \(url)")
                            })
                        })
                    }
                }
            }

            if isPullup {
                //  如果上拉加载
                self.statusList.append(contentsOf: tempArray)
                
            } else {
                //  下拉刷新
                self.statusList.insert(contentsOf: tempArray, at: 0)
            }
            
            group.notify(queue: DispatchQueue.main, execute: {
                //  等待单张图片全部执行完成后,回调数据
//                print("单张图片全部下载完成") 
                
                DispatchQueue.main.asyncAfter(wallDeadline: DispatchWallTime.now() + 2, execute: {
                    callBack(true)
                })
            })
        }
    }
}
